export class BaseProcessor {
  async process(filePath) {
    throw new Error('必须实现 process 方法')
  }

  async cleanup() {
    // 可选的清理方法
  }

  // 清理 HTML 标签
  cleanHtml(text) {
    return text.replace(/<[^>]*>/g, ' ')
      .replace(/\s+/g, ' ')
      .trim()
  }

  // 规范化空白字符
  normalizeWhitespace(text) {
    return text
      .replace(/\r\n/g, '\n\n')
      .replace(/\t/g, ' ')
      .replace(/\n{3,}/g, '\n\n')
      .trim()
  }

  /**
   * 检测并移除目录内容
   * @protected
   */
  filterTableOfContents(text) {
    // 定义目录的常见模式
    const tocPatterns = [
      // 中文目录模式
      /^目\s*录\s*\n(?:.*\n)*?(?=第.*[章节]|[一二三四五六七八九十]、|[1-9]\d*\.|正文)/im,
      // 英文目录模式
      /^(?:Table of Contents|Contents)\s*\n(?:.*\n)*?(?=Chapter|[1-9]\d*\.|Introduction|Preface)/im,
      // 数字+点+标题模式的连续行
      /(?:^\d+\.\s+.*\n){3,}/m,
      // 缩进式目录
      /(?:^\s{2,}\d+\..*\n){3,}/m
    ]

    // 应用所有模式
    let filteredText = text
    for (const pattern of tocPatterns) {
      filteredText = filteredText.replace(pattern, '')
    }

    return filteredText.trim()
  }
} 